package com.tencent.api.transaction;

import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 银行卡业务方法，调用dao方法
 */
public class BankService {

    /**
     *
     * TODO：
     *      事务添加是在业务方法中（service）
     *      利用try catch代码块，开启事务和提交事务，和事务回滚
     *      将connection传入dao层即可，dao只负责使用，对connection不要用close()     *
     *
     * @param addAccount
     * @param subAccount
     * @param money
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public void transfer(String addAccount,String subAccount,int money) throws SQLException, ClassNotFoundException {

        BankDao dao = new BankDao();

        //一个事务的最基本的要求，必须是同一个连接对象 connection
        //一个转账方法，应该属于同一个事务

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu", "root", "1234");

        try {
            //开启事务
            connection.setAutoCommit(false);//事务的自动提交功能关上！！！
            //执行数据库动作
            dao.add(addAccount,money,connection);
            System.out.println("-------------");
            dao.sub(subAccount,money,connection);

            //事务提交
            connection.commit();
        }catch (Exception e){
            //事务回滚
            connection.rollback();

            //抛出异常
            throw e;
        }finally {
            connection.close();
        }

    }

    @Test
    public void start() throws SQLException, ClassNotFoundException {
        transfer("ergouzi","lvdandan",500);
    }
}
